import { useRef, useCallback } from "react";

/**
 * 节流函数
 * @param func 需要节流的函数
 * @param delay 节流时间间隔（毫秒）
 * @returns 返回一个节流后的函数
 */
function useThrottle<T extends (...args: unknown[]) => void>(
  func: T,
  delay: number
): T {
  const lastExecTimeRef = useRef<number>(0);

  const throttledFunc = useCallback(
    (...args: Parameters<T>) => {
      const now = Date.now();
      const timeSinceLastExec = now - lastExecTimeRef.current;

      if (timeSinceLastExec >= delay) {
        // 如果距离上次执行已经超过 delay，立即执行
        func(...args);
        lastExecTimeRef.current = now;
      }
    },
    [func, delay]
  );

  return throttledFunc as T;
}

export default useThrottle;
